home *** CD-ROM | disk | FTP | other *** search
/ Apple WWDC 1996 / WWDC96_1996 (CD).toast / Technology Materials / QuickTime VR / MacOS / QuickDraw™ 3D 1.0.6F4 SDK / Development / 3DMF parser / 1.0 version / MF3DPC / MFINTOBJ.H < prev    next >
Encoding:
C/C++ Source or Header  |  1995-11-07  |  8.1 KB  |  226 lines  |  [TEXT/dosa]

  1. #ifndef MF3D_INTOBJECTS_H
  2. #define    MF3D_INTOBJECTS_H
  3. /*==============================================================================
  4.  *
  5.  *    File:        MFINTOBJ.H
  6.  *
  7.  *    Function:    Structure definitions for Metafile objects not returned
  8.  *                by MF3DReadAnObject().
  9.  *
  10.  *    Version:    Metafile:    Version 1.0 3DMF files
  11.  *                Package:    Release #2 of this code
  12.  *
  13.  *    Author(s):    Rick Wong (RWW), Duet Development Corp.
  14.  *                John Kelly (JRK), Duet Development Corp.
  15.  *
  16.  *    Copyright:    (c) 1995 by Apple Computer, Inc., all rights reserved.
  17.  *
  18.  *    Change History (most recent first):
  19.  *        FB7_JRK    Pragma macros
  20.  *        Fabio    Changed file name to 8 characters
  21.  *        F3A_RWW    TOC works.
  22.  *        F2R_RWW    Simple object model: most objects moved to "MFSUBOBJ.H".
  23.  *        F26_RWW    File created.
  24.  *==============================================================================
  25.  */
  26. #if defined(applec) || defined(__MWERKS__) || defined(THINK_C)
  27. #pragma once
  28. #endif
  29.  
  30. #include "MFIOCALL.H"
  31. #include "MFOBJCTS.H"
  32. #include "MFSUBOBJ.H"
  33. #include "MFTYPES.H"
  34.  
  35. /*==============================================================================
  36.  *    TableOfContents
  37.  *==============================================================================
  38.  */
  39. #define    kMF3DObjTableOfContents                    MF3DObjectType('t','o','c',' ')
  40. #define    kMF3DObjTableOfContentsText                "TableOfContents"
  41.  
  42. #define    kMF3DTocEntryType        1            /* always write type 1            */
  43. #define    kMF3DTocEntrySize        16
  44.  
  45. typedef struct MF3D_TOCEntryRec
  46. {    MF3DReferenceID                refID;
  47.     MF3DPositionReferencePtr    objLocation;
  48.     MF3DObjType                    objType;    /* valid if tocEntryType >= 1    */
  49. } MF3D_TOCEntryRec, *MF3D_TOCEntryPtr;
  50.  
  51. typedef struct MF3DTableOfContentsObj
  52. {    MF3DObjHeader
  53.     MF3DPositionReferencePtr    nextTOC;    /* next Table of Contents        */
  54.     MF3DReferenceID                refSeed;
  55.     MF3DInt32                    typeSeed;
  56.     MF3DUns32                    tocEntryType;
  57.     MF3DUns32                    tocEntrySize;
  58.     MF3DUns32                    nEntries;
  59.     MF3D_TOCEntryPtr            tocEntries;    /* size: nEntries                */
  60. } MF3DTableOfContentsObj, *MF3DTableOfContentsObjPtr;
  61.  
  62. /*==============================================================================
  63.  *    MF3D_TOCStuff
  64.  *
  65.  *    Reference ID lookup tables for table of contents
  66.  *==============================================================================
  67.  */
  68. typedef    union MF3D_TOCPosition
  69. {    MF3DCStringPtr            name;
  70.     MF3DBinaryFilePosition    location;
  71. } MF3D_TOCPosition, *MF3D_TOCPositionPtr;
  72.  
  73. typedef    struct MF3D_TOCReference
  74. {    MF3DUns32                refID;
  75.     MF3D_TOCPosition        ref;
  76.     MF3DObjType                type;
  77. } MF3D_TOCReference, *MF3D_TOCReferencePtr;
  78.  
  79. typedef    struct MF3D_TOCStuff
  80. {    MF3DCStringPtr            tocLabelName;    /* txt: TOC label                */
  81.     MF3DUns32                refSeed;        /* next available ref num        */
  82.     MF3DInt32                typeSeed;        /* next available type num        */
  83.     MF3DUns32                numReferences;    /* number of refs in TOC        */
  84.     MF3D_TOCReferencePtr    references;        /* pointer to refs array        */
  85.     /* the object type needs to be updated if we get a label on a container    */
  86.     MF3DBoolean                needToUpdate;
  87. } MF3D_TOCStuff, *MF3D_TOCStuffPtr;
  88.  
  89. /*==============================================================================
  90.  *    Type (User-defined type)
  91.  *==============================================================================
  92.  */
  93. #define    kMF3DObjType                            MF3DObjectType('t','y','p','e')
  94. #define    kMF3DObjTypeText                        "Type"
  95.  
  96. typedef struct MF3D_TypeList
  97. {    MF3DInt32            number;
  98.     MF3DCStringPtr        name;
  99. } MF3D_TypeList, *MF3D_TypeListPtr;
  100.  
  101. typedef    struct MF3D_TypeTable
  102. {    MF3DUns32            nTypes;
  103.     MF3D_TypeListPtr    types;
  104. } MF3D_TypeTable, *MF3D_TypeTablePtr;
  105.  
  106. /*==============================================================================
  107.  *    Object Table
  108.  *
  109.  *    During the first-pass read of a text file, we store the locations of all
  110.  *    the objects in the file. We resolve objRefID when we get to the
  111.  *    Table of Contents.
  112.  *==============================================================================
  113.  */
  114. typedef    struct MF3D_ObjectTableEntry
  115. {    MF3DBinaryFilePosition        objLocation;
  116.     MF3DReferenceID                objRefID;
  117. } MF3D_ObjectTableEntry, *MF3D_ObjectTableEntryPtr;
  118.  
  119. typedef    struct MF3D_ObjectTable
  120. {    MF3DUns32                    numObjects;
  121.     MF3D_ObjectTableEntryPtr    objects;    /* size: numObjects + 1            */
  122. } MF3D_ObjectTable;
  123.  
  124. /*==============================================================================
  125.  *    MF3D_ReadBuffer
  126.  *
  127.  *    We read one object in at a time. This prevents us from scanning past the
  128.  *    end of an object.
  129.  *==============================================================================
  130.  */
  131. typedef    struct MF3D_SaveBuffer    MF3D_SaveBuffer, *MF3D_SaveBufferPtr;
  132. struct MF3D_SaveBuffer
  133. {    MF3DUns32            bufSize;
  134.     MF3D_SaveBufferPtr    next;
  135. };
  136.  
  137. typedef struct MF3D_ReadBuffer
  138. {    char                *buf;                /* the actual buffer            */
  139.     MF3DUns32            bufPos;                /* current position in buffer    */
  140.     MF3DUns32            bufSize;            /* bin: size of buffer            */
  141.     MF3D_SaveBufferPtr    saveSize;            /* bin: stack of buffer sizes    */
  142. } MF3D_ReadBuffer;
  143.  
  144. /*==============================================================================
  145.  *    MF3D_WriteStack
  146.  *
  147.  *    When writing containers in a binary file format, we write a phony size until
  148.  *    we reach the end of the container. Then, we backpatch the real size.
  149.  *    So, we need to store the container size locations as we get them.
  150.  *==============================================================================
  151.  */
  152. typedef    struct MF3D_WriteStack    MF3D_WriteStack, *MF3D_WriteStackPtr;
  153. struct MF3D_WriteStack
  154. {    MF3DBinaryFilePosition    location;
  155.     MF3D_WriteStackPtr        next;
  156. };
  157.  
  158. /*==============================================================================
  159.  *    MF3D_GroupState
  160.  *
  161.  *    NOTE: Group State is not actually useful in this release.
  162.  *==============================================================================
  163.  */
  164. typedef    struct MF3D_GroupState        MF3D_GroupState, *MF3D_GroupStatePtr;
  165.  
  166. struct MF3D_GroupState
  167. {    MF3DDisplayGroupStateFlags    traversalFlags;        /* group state            */
  168.     MF3D_GroupStatePtr            parent;                /* stack link            */
  169. };
  170.  
  171. /*==============================================================================
  172.  *    MF3D_ResolveState
  173.  *
  174.  *    Information used during a ResolveReference call.
  175.  *==============================================================================
  176.  */
  177. typedef    struct MF3D_FileRec                MF3D_FileRec, *MF3D_FilePtr;
  178.  
  179. enum MF3D_ResolutionStateEnum
  180. {    MF3D_NotResolvingReference,
  181.     MF3D_ResolvingReference,
  182.     MF3D_ResolvingGroup,
  183.     MF3D_ResolvingFile    = MF3D_ResolvingGroup
  184. };
  185.  
  186. typedef    struct MF3D_ResolveStuff
  187. {    MF3DUns32                    resState;    /* read: resolving reference?    */
  188.     MF3D_FilePtr                reference;    /* read: link down to reference    */
  189.     MF3D_FilePtr                parent;        /* read: link up to parent        */
  190.     MF3DBinaryFilePosition        returnLoc;    /* read: return location        */
  191. } MF3D_ResolveStuff;
  192.  
  193. /*==============================================================================
  194.  * MF3D_FileRec:
  195.  *    Internal file record.
  196.  *==============================================================================
  197.  */
  198. typedef    enum MF3D_ReadWriteEnum
  199. {    MF3D_MetafileRead,
  200.     MF3D_MetafileWrite
  201. } MF3D_ReadWriteEnum;
  202.  
  203. typedef struct MF3D_IOPrimitiveMethods    *MF3D_IOPrimitivesTable;
  204.  
  205. struct MF3D_FileRec                            /* internal file record            */
  206. {    MF3DUserFilePtr                userFilePtr;/* user-provided file pointer    */
  207.     MF3D_ReadWriteEnum            readWrite;    /* reading or writing            */
  208.     MF3DDataFormatEnum            dataFormat;    /* binary, swapped, or text        */
  209.     MF3DProcsRec                procsRec;    /* internal record to callbacks    */
  210.     MF3D_IOPrimitivesTable        primitives;    /* i/o methods table            */
  211.     MF3D_ReadBuffer                readBuffer;    /* object-sized data buffer        */
  212.     MF3DUns32                    inContainer;/* processing in a container    */
  213.     MF3D_TOCStuff                tocStuff;    /* table of contents info        */
  214.     MF3DBinaryFilePosition        tocLocation;/* bin write: TOC ptr in header    */
  215.     MF3D_ObjectTable            objTable;    /* txt: index to all objects    */
  216.     MF3DUns16                    indent;        /* txt write: indentation        */
  217.     MF3D_GroupState                groupState;    /* read: current attributes        */
  218.     MF3D_TypeTable                typeTable;    /* user-defined types            */
  219.     MF3D_ResolveStuff            resStuff;    /* read: reference resolution    */
  220.     MF3D_WriteStackPtr            writeStack;    /* bin write: container locs    */
  221. };
  222.  
  223. #define    kMF3D_MaxIndentation                127
  224.  
  225. #endif
  226.